#include "public.h"


//
//
////typedef struct PIDtemp
////{
////
////  s32  s32Error;  	   
////  s32  s32Kp;   
////  s32  s32Ki;  
////  
////  s32  s32Sum;  
////  s32  s32PSum;   
////  s32  s32ISum;  
////  
////  s32  s32MaxOut; 
////  s32  s32MinOut; 
////  
////  
////  s32  s32KpSum;
////  s32  s32ISumLim;
////  s32  s32ErrSum;
////}PID_U;
////
////PID_U  VoltPid;
//
////s32  s32pFactor =1;// 根据需要调节数值
////s32  s32iFactor =1;
////===============================
//void intial_Volt_Pid( void )
//{
//
//   gc.s32Error = 0;   //
//   gc.s32ErrSum   = 0;   
//   
//   gc.s32Sum   = 0;   
//   gc.s32Kp    = 3;// gc.DC_u32VoltSet/10;;  //P参数是根据设置的电压值有关的，可以适当调整pFactor和 10的数字   
//   gc.s32Ki    = 3;   // 
//
//   gc.s32ISum  =0;//初始化 积分值为最大 输出占空比最大
//   gc.s32MaxOut = 1000; // 
//   gc.s32MinOut = 0;    //    
// 
//   
//   gc.s32KpSum  = 0;  //   
//   gc.s32ISumLim = 100000;
//}
//
////===============================
//u16 Volt_Pid_Calculate( s32 s32VoltRef  )
//{
// 
//
//   
////  gc.s32Error = s32VoltRef+gc.s32work_volt_K-gc.s32DC_FeedVolt;  
//   
//   //------积分处理---
////    if( 0-VoltPid.s32Error > (s32VoltRef*4/10) || VoltPid.s32Error > (s32VoltRef*4/10) ) // 30% 误差过
////   {
////       VoltPid.s32ISum  +=  ( (VoltPid.s32Ki*VoltPid.s32Error) >> 8 ); //I sum 
////   }   
////   
////   
////   else if( 0-VoltPid.s32Error > (s32VoltRef*3/10) || VoltPid.s32Error > (s32VoltRef*3/10) ) // 30% 误差过
////   {
////       VoltPid.s32ISum  +=  ( (VoltPid.s32Ki*VoltPid.s32Error) >> 4 ); //I sum 
////   }
////   else if( 0-VoltPid.s32Error > (s32VoltRef*2/10) || VoltPid.s32Error > (s32VoltRef*2/10)) // 20% 误差过
////   {
////       VoltPid.s32ISum  +=  ( (VoltPid.s32Ki* VoltPid.s32Error) >> 3 ); //I sum 
////   }  
////   else if( 0-VoltPid.s32Error > (s32VoltRef*1/10) || VoltPid.s32Error > (s32VoltRef*1/10)) // 10% 误差过
////   {
////       VoltPid.s32ISum  +=  ( (VoltPid.s32Ki* VoltPid.s32Error) >> 2 ); //I sum 
////   }    
////   else                      // 10% 误差过
////   {
////      VoltPid.s32ISum  +=  ( (VoltPid.s32Ki* VoltPid.s32Error) >> 1 ); //I sum 
////   }     
//   gc.s32ISum  +=   (gc.s32Ki* gc.s32Error)  ; //I sum 
//   
//   if( gc.s32ISum >= gc.s32ISumLim ) //积分和的限制 
//   {
//       gc.s32ISum = gc.s32ISumLim; 
//   } 
//   if( gc.s32ISum <= 0) //积分和的限制 
//   {
//       gc.s32ISum = 0; 
//   }   
//
//   
//   //-----比例处理------      
//   gc.s32KpSum  =gc.s32Error * gc.s32Kp ;
//   
//   //-------------------------- 比例  +   积分------  
//   gc.s32Sum =  gc.s32KpSum + gc.s32ISum/100;// 比例 + 积分
//   
//   if( gc.s32Sum > gc.s32MaxOut) //1024 
//   {
//      gc.s32Sum = gc.s32MaxOut;
//   }
//   else if( gc.s32Sum < gc.s32MinOut ) //0
//   {
//       gc.s32Sum = gc.s32MinOut;
//   }
//   return (u16)gc.s32Sum;  
//}
//
//
//
//void Volt_loop(void)
//{
//
//  
//   if( gc.u16Scan_volt_1ms_cnt < 1 ) //5ms 扫描一次 ，根据需要调节时间
//   {  return;}
//   gc.u16Scan_volt_1ms_cnt =0;
//   
//   gc.s32DC_FeedVolt = ADC_A( ADC_Channel_6 )/20; //获取第一级直流电压  AD/19=电压
//   
//   
// 
//   if( gc.First==0 ) //  
//   {
//      gc.First= 1;
//      intial_Volt_Pid();
//      Set_Pwm_Duty( gc.u32Pwm_duty ); 
//      
////      TIM_Cmd(TIM3,ENABLE);           //配置的时候已经使能了
//   }
//   if( gc.u16DC_VoltSet_last != gc.u16DC_volt_set )               //如果设置电压变化
//   {
//      gc.u16DC_VoltSet_last = gc.u16DC_volt_set;
////个人觉得当设置电压变化时，相应得比例 参数也要跟随变化，这个很重要，比例觉得跟随响应的快慢
////        VoltPid.s32Kp  = s32pFactor*gc.u32DC_VoltSet/10;  // 比例系数 式子，
////个人觉得当设置电压变化时，相应得积分 参数可跟随变化，也可不变 ，     
////  VoltPid.s32Ki  = s32iFactor*gc.u32VoltRef/100;    // 积分系数 式子  
//   }
//
//   
//   
//   
//   
//   gc.u32Pwm_duty = Volt_Pid_Calculate( gc.u16DC_volt_set ); //PID 计算
//
//   if ( gc.u32Pwm_duty > gc.u16volt_set_max_bit )
//   {
//    gc.u32Pwm_duty = gc.u16volt_set_max_bit;
//   }
//   if ( gc.u32Pwm_duty < gc.u16volt_set_min_bit )
//   {
//    gc.u32Pwm_duty = gc.u16volt_set_min_bit;
//   } 
//   
//
//   if( gc.u16Pwm_duty_last != gc.u32Pwm_duty )          //占空比更新
//   {
//      gc.u16Pwm_duty_last = gc.u32Pwm_duty;
//      Set_Pwm_Duty( gc.u32Pwm_duty ); //设置占空比
//   }
//
//}
